<?php
namespace app\admin\controller;
use think\Controller;
use app\admin\model\AdminUser as User;
use app\facade\WebTool;
use think\facade\Request;
class AdminUser extends Controller
{
	// 设置中间件
	protected $middleware =  [ 'AdminUserCheck', ];
	// 用户添加接口参数控制
	protected $addParam = ['group_id','username','password','repassword','name','phone','email','status','note','nuptial'];
	// 用户编辑接口参数控制
	protected $editParam = ['id','group_id','name','phone','email','status','note','nuptial'];
	// 用户获取接口参数控制
	protected $getParam = ['id'];

	public function list() { return view(); }
	public function add() { return view(); }
	public function edit() { return view(); }

	/**
	 * ParamDispose 参数进行提取处理
	 * @param array $array 允许访问的参数
	 * @param string $scene 提取场景
	 * @return  array 可用的请求参数
	 */
	private static function ParamDispose($array,$scene='')
	{
		// 请求参数获取
		$param = Request::param();
		// 场景执行
		switch ($scene)
		{
			// 如果场景是某种场景的判断
			case 'general': break;
			// 默认执行方案
			default:
				foreach ($request as $key => $val) { if (!in_array($key, $array)) unset($request[$key]); }
			break;
		}
		// 返回参数
		return $request;
	}

	/**
	 * listUser 用户列表接口
	 * @return array 返回空数据或者用户列表数据
	 */
	public function listUser()
	{
		// 实例化模型
		$user = new User();
		// 在模型中进行查询
		$list = $user->userList();
		// 如果为空的判断
		if (empty($list)) return ['code'=>1,'msg'=>'User_List_Get_Empty','data'=>false];
		// 数据提取 提取page信息
		$data['page'] = $list->render();
		// 数据提取，提取数据列表信息
		$data['data'] = $list->toArray()['data'];
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Success','data'=>$data];
	}

	/**
	 * userGroup 用户组信息接口
	 * @return array 返回空数据或者用户组数据
	 */
	public function userGroup()
	{
		// 实例化模型
		$user = new User();
		// 在模型中进行查询
		$list = $user->groupUser();
		// 如果为空的判断
		if (empty($list)) return ['code'=>1,'msg'=>'User_Group_Empty','data'=>false];
		// 使用工具类，进行数据提取转换操作
		$data = WebTool::arrayKeyValPair($list,'id','title');
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Success','data'=>$data];
	}

	/**
	 * getUser 用户详情获取接口
	 * @return array 返回空或者返回用户详情数据
	 */
	public function getUser()
	{
		// 实例化模型
		$user = new User();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->getParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminUser.userid');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行查询
		$data = $user->userGet($param['id']);
		// 如果为空的判断
		if (empty($data)) return ['code'=>1,'msg'=>'User_Details_Empty','data'=>false];
		// 返回查询后的数据
		return ['code'=>0,'msg'=>'Seccess','data'=>$data];
	}

	/**
	 * addUser 用户添加接口
	 * @return array 返回添加数据是否成功
	 */
	public function addUser()
	{
		// 实例化模型
		$user = new User();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->addParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminUser.useradd');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 对参数中的密码进行处理
		$param['password'] = passRule($param['password']);
		// 在模型中进行操作
		$res = $user->userAdd($param);
		// 如果操作失败进行错误信息返回
		if (false === $res) return ['code'=>1,'msg'=>'User_Add_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Success','data'=>true];
	}

	/**
	 * editUser 用户编辑接口
	 * @return array 返回编辑数据是否成功
	 */
	public function editUser()
	{
		// 实例化模型
		$user = new User();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->editParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminUser.useredit');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行操作
		$res = $user->userEdit($param['id'],$param);
		// 如果操作失败进行错误信息返回
		if (true !== $res) return ['code'=>1,'msg'=>'User_Edit_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Success','data'=>frue];
	}

	/**
	 * delUser 用户删除接口
	 * @return array 返回删除数据是否成功
	 */
	public function delUser()
	{
		// 实例化模型
		$user = new User();
		// 获取用户传入的参数
		$param = self::ParamDispose($this->getParam);
		// 进行请求信息验证
		$res = $this->validate($param,'AdminUser.userid');
		// 如果验证失败则返回错误信息
		if (true !== $res) return ['code'=>1,'msg'=>$res,'data'=>false];
		// 在模型中进行操作
		$res = $user->userDel($param['id']);
		// 如果操作失败进行错误信息返回
		if (true !== $res) return ['code'=>1,'msg'=>'User_del_Error','data'=>false];
		// 操作成功返回数据
		return ['code'=>0,'msg'=>'Seccess','data'=>true];
	}
}